package com.dxf.bigdata.D04_spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 *  RDD方法主要有 转换 和 行动
 *   转换 如  Map , flatMap
 *   行动 collect
 *
 *
 *   RDD算子:   RDD的方法就是算子 --> 对数据的操作称为算子
 *
 *   RDD算子 => 转换算子 Map , 行动算子  collect
 *
 *
 *
 *
 *
 */
object T07_RDD算子 {
  def main(args: Array[String]): Unit = {

    //TODO 准备环境
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(sparkConf)

    //TODO 创建RDD
    // minPartitions: Int = defaultMinPartitions 最小分区,可以指定
    // 1 数据以行为单位进行读取
    // spark采用的方式和handoop一样,一行一行读取
    // 2 数据读取时以偏移量为单位
    /**
     * 偏移量理解:
     *  1@@    =>012
     *  2@@    =>345
     *  3      =>6
     *
     */
      //TODO  3  偏移量计算 有7个字节 ,最小分区2 ,则每个分区个数  7/2 =3
      //偏移量不会被重复读取
      //第一分区 0 => [0 , 3]
      //第二分区 1 => [3 , 6]
      //第三分区 2 => [6 , 7]
    val rdd: RDD[String] = sc.textFile("datas/1.txt",2)

    rdd.saveAsTextFile("output")
    //TODO 关闭环境
    sc.stop()


  }
}
